#include "../Logger/Logger.h"

using namespace std;

// 方法1：使用加减法
void swapWithAddSub(int& a, int& b) {
    if (a != b) {  // 避免a和b相同时出现问题
        a = a + b;  // a现在存储两数之和
        b = a - b;  // b等于原来的a（a+b - b = a）
        a = a - b;  // a等于原来的b（a+b - 原来的a = b）
    }
}

// 方法3：使用异或运算（高效且安全，推荐）
/**
 * 为什么这个方法高效？
 * 异或是位运算，直接操作二进制，比加减法、乘除法的 CPU 指令更简单，速度更快。
 * 不会像加减法那样出现溢出（比如两个大数相加超过变量最大值）。
*/
void swapWithXOR(int& a, int& b) {
    if (a != b) {  // 相同值异或会变为0
        a = a ^ b;  // a存储a和b的异或结果
        b = a ^ b;  // b等于原来的a（(a^b)^b = a）
        a = a ^ b;  // a等于原来的b（(a^b)^原来的a = b）
    }
}

void logger_init()
{
    // 配置日志系统
    LoggerConfig config;
    config.baseFileName = "./log/unique_ptr_log";
    config.maxFileSize = 1024 * 1024; // 1MB
    config.maxFiles = 3;
    config.consoleOutput = true;
    config.level = spdlog::level::debug;

    // 初始化日志
    Logger::init(config);

    LOG_INFO("我是王乾");
}

int main()
{
    system("chcp 65001");

    logger_init();

    int a = 10, b = 20;
    LOG_INFO("a:{} b:{}", a, b);

    swapWithXOR(a, b);

    LOG_INFO("a:{} b:{}", a, b);

    return 0;
}
